package com.commonly.commonlyUsed.文件;

/**
 * @author : guanym
 * @date : 2021/4/21 9:36
 * @description
 */

import org.apache.commons.io.FileUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;

@RestController
@RequestMapping("/file")
public class FileController {

    @RequestMapping(value="/upload",method = RequestMethod.POST)
    @CrossOrigin
    public Object getFile(HttpServletRequest request){
        /**
         下边这个是获取非文件的属性值方法
         **/
        String uploadDir= request.getParameter("uploadDir");
        String demo= request.getParameter("demo");
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//        List<MultipartFile> fileList = multipartRequest.getFiles("file");
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        if(fileMap == null || fileMap.size() == 0){
            //return addResultMapMsg(false,"请上传文件,注意文件的name属性为file");
        }
        Collection<MultipartFile> files = fileMap.values();
        for(MultipartFile file:files){
            /**
             注意这里获取的个数，是根据前端form表单里有几个，type=file来决定的，
             比如你虽然只点选了一个文件，上传，但这里实际上回有两个MultipartFile对 象，只不过其中一个MutipartFile的文件名会为空，这就是为什么下边会有个判断文件名
             为空的步骤**/
            String req= file.getOriginalFilename();
            if(StringUtils.isEmpty(req)){
                continue;
            }
            File tempFile = getTmpFile(req);
            System.out.println(tempFile.getAbsolutePath());
            if(!tempFile.exists()){
                tempFile.getParentFile().mkdirs();
                try {
                    tempFile.createNewFile();
                    file.transferTo(tempFile); //到这里tempFile即是上传上来的文件。
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(req);
        }
        return null;
    }
    /**
     下边这个是好方法
     **/
    public File getTmpFile(String fileName) {
        File tmpDir = FileUtils.getTempDirectory();
        System.out.println("========"+tmpDir.getAbsolutePath());
        String tmpFileName = (Math.random() * 10000 + "").replace(".", "")+"_"+fileName;
        return new File(tmpDir, tmpFileName);
    }


    @RequestMapping(value="/upload2",method = RequestMethod.POST)
    @CrossOrigin
    public Object getFile2(DemoFile demoFile){
        /**
         下边这个是获取非文件的属性值方法
         **/
        String demo= demoFile.getDemo();
        MultipartFile[] multipartFiles = demoFile.getFile();
        for(int i=0;i<multipartFiles.length;i++){
            System.out.println(multipartFiles[i].getOriginalFilename());
        }
        return null;
    }

    @RequestMapping(value="/upload3",method = RequestMethod.POST)
    @CrossOrigin
    public Object getFile3(MultipartFile[] multipartFiles) {

        for (int i = 0; i < multipartFiles.length; i++) {
            System.out.println(multipartFiles[i].getOriginalFilename());
        }
        return null;
    }
}
